package com.kexio.sms.service;

import java.util.List;
import java.util.Map;

import com.kexio.common.dto.PageResponse;
import com.kexio.common.dto.Result;
import com.kexio.common.page.PageQuery;
import com.kexio.sms.entity.SmsTemplate;

/**
 * 短信模板服务接口
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
public interface SmsTemplateService {
    
    /**
     * 创建短信模板
     * 
     * @param template 模板信息
     * @return 创建结果
     */
    Result<SmsTemplate> createTemplate(SmsTemplate template);
    
    /**
     * 更新短信模板
     * 
     * @param template 模板信息
     * @return 更新结果
     */
    Result<SmsTemplate> updateTemplate(SmsTemplate template);
    
    /**
     * 删除短信模板
     * 
     * @param templateId 模板ID
     * @return 删除结果
     */
    Result<Boolean> deleteTemplate(String templateId);
    
    /**
     * 根据ID获取模板
     * 
     * @param templateId 模板ID
     * @return 模板信息
     */
    SmsTemplate getTemplate(String templateId);
    
    /**
     * 根据模板编码获取模板
     * 
     * @param templateCode 模板编码
     * @return 模板信息
     */
    SmsTemplate getTemplateByCode(String templateCode);
    
    /**
     * 分页查询模板列表
     * 
     * @param pageQuery 分页参数
     * @param smsType 短信类型
     * @param provider 服务提供商
     * @param status 状态
     * @return 模板列表
     */
    PageResponse<SmsTemplate> getTemplateList(PageQuery pageQuery, String smsType, String provider, String status);
    
    /**
     * 获取所有活跃模板
     * 
     * @param smsType 短信类型
     * @param provider 服务提供商
     * @return 模板列表
     */
    List<SmsTemplate> getActiveTemplates(String smsType, String provider);
    
    /**
     * 渲染模板内容
     * 
     * @param templateCode 模板编码
     * @param params 参数
     * @return 渲染后的内容
     */
    Result<String> renderTemplate(String templateCode, Map<String, Object> params);
    
    /**
     * 验证模板参数
     * 
     * @param templateCode 模板编码
     * @param params 参数
     * @return 验证结果
     */
    Result<Boolean> validateTemplateParams(String templateCode, Map<String, Object> params);
    
    /**
     * 启用模板
     * 
     * @param templateId 模板ID
     * @return 启用结果
     */
    Result<Boolean> enableTemplate(String templateId);
    
    /**
     * 禁用模板
     * 
     * @param templateId 模板ID
     * @return 禁用结果
     */
    Result<Boolean> disableTemplate(String templateId);
    
    /**
     * 增加模板使用次数
     * 
     * @param templateCode 模板编码
     */
    void incrementUsageCount(String templateCode);
    
    /**
     * 获取模板使用统计
     * 
     * @param timeRange 时间范围
     * @return 使用统计
     */
    Map<String, Object> getUsageStatistics(String timeRange);
    
    /**
     * 同步第三方模板
     * 
     * @param provider 服务提供商
     * @return 同步结果
     */
    Result<Integer> syncProviderTemplates(String provider);
}
